/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package trabalho3;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author mateus
 */
class JPAPaginationTableModel extends AbstractTableModel {

    private EntityManagerFactory emf;
    private EntityManager em;
    private List<Oportunidade> listOportunidade;
    private OportunidadeJpaController controller;
    private String tipo;
    private Oportunidade oportunidade;

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
        listaAtualiza();
    }

    public void listaAtualiza()
    {
        if (tipo.equals("Pequisa"))
            return;
        if (tipo.equals("Oportunidade"))
        {
            listOportunidade = controller.findOportunidadeEntities("Estagio");
            listOportunidade.addAll(controller.findOportunidadeEntities("Emprego"));
            listOportunidade.addAll(controller.findOportunidadeEntities("Bolsa"));
            return;
        }
        listOportunidade = controller.findOportunidadeEntities(tipo);
    }
    
    public void listaPesquisa(String text)
    {
        listOportunidade= controller.procuratitulo("Estagio", text);
        listOportunidade.addAll(controller.procuratitulo("Bolsa", text));
        listOportunidade.addAll(controller.procuratitulo("Emprego", text));
    }
    
    JPAPaginationTableModel() {
        this.emf = Persistence.createEntityManagerFactory("Trabalho3PU");
        this.em = emf.createEntityManager();
        this.controller = new OportunidadeJpaController(emf);
        this.setTipo("Oportunidade");
        
    }

    @Override
    public int getRowCount() {
        return (listOportunidade.size());
 
    }

    @Override
    public int getColumnCount() {
        if (tipo.equals("Estagio") || tipo.equals("Emprego")) {
            return 7;
        }
        if (tipo.equals("Bolsa")) {
            return 9;
        }
        return 6;
    }

    @Override
    public String getColumnName(int column) {
        switch (column) {
            case 0:
                return "Titulo";
            case 1:
                return "Descricao";
            case 2:
                return "Contato";
            case 3:
                return "Local";
            case 4:
                return "Carga horária";
            case 5:
                return "Valor";
            case 6:
                switch (tipo) {
                    case "Bolsa":
                        return "Nome Lattes";
                    case "Emprego":
                        return "Beneficios";
                    case "Estagio":
                        return "Orgao";
                }
            case 7:
                return "Endereco Lattes";
            case 8:
                return "Duracao";
            default:
                return "Erro";
        }
    }
    public void deleta (int rowSelected)
    {
        oportunidade = listOportunidade.get(rowSelected);
        controller.destroy(oportunidade.getClass(),oportunidade.getId());
        listOportunidade.remove(rowSelected);
        fireTableRowsDeleted(rowSelected, rowSelected);
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {

        Object toReturn = null;
        oportunidade = listOportunidade.get(rowIndex);
        
        switch (columnIndex) {
            case 0:
                return oportunidade.getTitulo();
            case 1:
                return oportunidade.getDescricao();
            case 2:
                return oportunidade.getContato();
            case 3:
                return oportunidade.getLocal();
            case 4:
                return oportunidade.getCarga_horaria();
            case 5:
                return oportunidade.getValor();
            case 6:
                switch (tipo) {
                    case "Estagio":
                        Estagio est = (Estagio) oportunidade;
                        return toReturn = est.getOrgao();
                    case "Emprego":
                        Emprego e = (Emprego) oportunidade;
                        return toReturn = e.getBeneficios();
                    case "Bolsa":
                        Bolsa b = (Bolsa) oportunidade;
                        return toReturn = b.getNomelattes();
                }
                break;
            case 7:
                Bolsa b = (Bolsa) oportunidade;
                return toReturn = b.getEnderecolattes();
            case 8:
                Bolsa b1 =(Bolsa) oportunidade;
                return toReturn = b1.getDuracao();
            default:
                toReturn = null;
        }
        return toReturn;

    }

    @Override
    public boolean isCellEditable(int row, int col) {
        return false;
    }

   
    
    
    public Oportunidade getObjectrow(int row)
    {
        return oportunidade = listOportunidade.get(row);
        
        
    }
}
